// input_student.cpp -- 录入学生信息
#include "../include/student_score_system.h"  // 包含自定义的头文件
#include <iostream>

// 录入学生信息
void inputStudent(System *sys)
{
    using std::cin;
    using std::cout;
    using std::endl;
    if (sys->num == 1000) // 判断是否已达录入上限
    {
        cout << "系统已达录入上限，请重新输入: " << endl;
        //system("pause");
        //system("cls");
        showMenu();
        selectOption();
    }
    else
    {
        //system("cls"); // 清屏
        cout << "===================================================" << endl;
        cout << "*                   录入学生成绩                  *" << endl;
        cout << "===================================================" << endl;

        // 姓名
        cout << "请输入学生姓名: ";
        cin >> sys->stu[sys->num].name_;

        // 学号
        cout << "请输入学生学号: ";
        cin >> sys->stu[sys->num].id_;

        // 性别
        cout << "请输入学生性别(1---男)/(2---女): ";
        cin >> sys->stu[sys->num].sex_;
        if (cin.fail()) // 判断输入是否为数字，错误则返回1
        {
            while (cin.fail() || (sys->stu[sys->num].sex_ != 1 && sys->stu[sys->num].sex_ != 2)) // 判断输入数字是否正确
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].sex_;
            }
        }
        else // 在输入为数字的情况下，判断数字是否正确
        {
            while (sys->stu[sys->num].sex_ != 1 && sys->stu[sys->num].sex_ != 2)
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].sex_;
            }
        }

        // 语文成绩
        cout << "请输入语文成绩: ";
        cin >> sys->stu[sys->num].language_;
        if (cin.fail()) // 判断输入是否为数字，错误则返回1
        {
            while (cin.fail() || (sys->stu[sys->num].language_ > 100 || sys->stu[sys->num].language_ < 0)) // 判断输入数字是否正确
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].language_;
            }
        }
        else // 在输入为数字的情况下，判断数字是否正确
        {
            while (sys->stu[sys->num].language_ > 100 || sys->stu[sys->num].language_ < 0)
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].language_;
            }
        }

        // 数学成绩
        cout << "请输入数学成绩: ";
        cin >> sys->stu[sys->num].math_;
        if (cin.fail()) // 判断输入是否为数字，错误则返回1
        {
            while (cin.fail() || (sys->stu[sys->num].math_ > 100 || sys->stu[sys->num].math_ < 0)) // 判断输入数字是否正确
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].math_;
            }
        }
        else // 在输入为数字的情况下，判断数字是否正确
        {
            while (sys->stu[sys->num].math_ > 100 || sys->stu[sys->num].math_ < 0)
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].math_;
            }
        }

        // 英语成绩
        cout << "请输入英语成绩: ";
        cin >> sys->stu[sys->num].english_;
        if (cin.fail()) // 判断输入是否为数字，错误则返回1
        {
            while (cin.fail() || (sys->stu[sys->num].english_ > 100 || sys->stu[sys->num].english_ < 0)) // 判断输入数字是否正确
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].english_;
            }
        }
        else // 在输入为数字的情况下，判断数字是否正确
        {
            while (sys->stu[sys->num].english_ > 100 || sys->stu[sys->num].english_ < 0)
            {
                cin.clear();              // 重置错误输入标记
                while (cin.get() != '\n') // 删除错误输入
                    continue;
                cout << "输入错误，请重新输入: ";
                cin >> sys->stu[sys->num].english_;
            }
        }

        sys->num++; // 记录录入个数

        cout << "成绩录入成功，是否继续录入? (Y/N)" << endl;
        char ch;
        while (cin.get(ch))
        {
            if (ch == 'Y' || ch == 'y' || ch == 'N' || ch == 'n') // 判断输入是否正确
            {
                if (ch == 'Y' || ch == 'y')
                {
                    //system("cls");
                    inputStudent(sys);
                }
                else if (ch == 'N' || ch == 'n')
                {
                    system("cls");
                    showMenu();
                    selectOption();
                }
                break;
            }
            else
            {
                cin.clear();
                while (cin.get() != '\n')
                    continue;
                cout << "输入错误，请重新输入(Y/N): ";
            }
        }

        cin.get();
    }
}

void exitSystem()
{
    std::cout << "程序终止.\n";
    exit(EXIT_FAILURE);
}